/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import conexao.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.ArrayList;
import modelo.Funcionario;
//import java.util.Date;

public class FuncionarioDAO {
    
    private Connection conexao;
    private PreparedStatement stmt;
    private ResultSet rs;
    private String sql;

    public FuncionarioDAO() throws Exception {
        try {
            this.conexao = Conexao.getConexao();
        } catch (Exception ex) {
            throw new Exception("Erro: " + ex.getMessage());
        }
    }

    public void finalizar() throws Exception {
        try {
            Conexao.closeConexao(this.conexao, this.stmt, this.rs);
        } catch (SQLException ex) {
            throw new Exception("Erro ao finalizar " + ex);
        }
    }
    
    public void incluir(Funcionario funcionario) throws Exception {
        try {
            sql = "insert into FUNCIONARIO (ID, NOME, REGISTRO, DATANASCIMENTO, DATAADMISSAO, " +
                    "DATADEMISSAO, ATIVO) values (?, ?, ?, ?, ?, ?, ?)";
            stmt = conexao.prepareStatement(sql);
            stmt.setInt(1, funcionario.getId());
            stmt.setString(2, funcionario.getNome());
            stmt.setInt(3, funcionario.getRegistro());                             
            //stmt.setDate(4, funcionario.getDataNascimento());
            //stmt.setDate(5, funcionario.getDataAdmissao());
            //stmt.setDate(6, funcionario.getDataDemissao());
            stmt.setBoolean(7, funcionario.getAtivo());
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            throw new Exception("Erro ao incluir " + ex);
        }
    }

    public void alterar(Funcionario funcionario) throws Exception {
        try {
            sql = "update FUNCIONARIO set NOME=? where ID=?";
            stmt = conexao.prepareStatement(sql);
            stmt.setString(1, funcionario.getNome());
            stmt.setInt(2, funcionario.getId());
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            throw new Exception("Erro ao alterar " + ex);
        }
    }

    public void excluir(Integer id) throws Exception {
        try {
            sql = "delete from FUNCIONARIO where ID=?";
            stmt = conexao.prepareStatement(sql);
            stmt.setInt(1, id);
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            throw new Exception("Erro ao excluir " + ex);
        }
    }

    public Funcionario consultar(Integer id) throws Exception {
        try {
            sql = "select * from FUNCIONARIO where ID=?";
            stmt = conexao.prepareStatement(sql);
            stmt.setInt(1, id);
            rs = stmt.executeQuery();
            Funcionario funcionario = new Funcionario();
            if (rs.next()) {
                funcionario.setId(rs.getInt("id"));
                funcionario.setNome(rs.getString("nome"));
                funcionario.setRegistro(rs.getInt("registro"));
                funcionario.setDataAdmissao(rs.getDate("dataadmissao"));
                funcionario.setDataNascimento(rs.getDate("datanascimento"));
                funcionario.setDataDemissao(rs.getDate("datademissao"));
                funcionario.setAtivo(rs.getBoolean("ativo"));
            }
            rs.close();
            stmt.close();
            return funcionario;
        } catch (SQLException ex) {
            throw new Exception("Erro ao consultar " + ex);
        }    
    }            
    
        public List<Funcionario> listar() throws Exception {
        try {
            sql = "select * from FUNCIONARIO order by NOME";
            stmt = conexao.prepareStatement(sql);
            rs = stmt.executeQuery();
            List<Funcionario> funcionarios = new ArrayList<Funcionario>();
            
            while (rs.next()) {
                Funcionario funcionario = new Funcionario();
                funcionario.setId(rs.getInt("id"));
                funcionario.setNome(rs.getString("nome"));
                funcionario.setRegistro(rs.getInt("registro"));
                funcionario.setDataNascimento(rs.getDate("datanascimento"));
                funcionario.setDataAdmissao(rs.getDate("dataadmissao"));
                funcionario.setDataDemissao(rs.getDate("datademissao"));
                funcionario.setAtivo(rs.getBoolean("ativo"));
                
                funcionarios.add(funcionario);
            }
            rs.close();
            stmt.close();
            return funcionarios;
        } catch (SQLException ex) {
            throw new Exception("Erro ao listar " + ex);
        }
    }  
}
